/**
 * 发布者
 * 每一个监视的属性， 都具有一个对应的发布者对象
 */
class Dep { 
  constructor() { 
    // 存储所有的观察者
    this.watchs = []
  }
  /**
   * 添加观察者（监视的属性对应的观察者）
   * 在监察的属性的getter 方法里添加观察者
   * @param {*} watch 观察者
   */
  addSub(watch) { 
    if (watch && watch.update) { // 观察者， 必须具有update方法
      this.watchs.push(watch)
    }
  }
  /**
   * 给所有的观察者， 发送通知
   */
  notify() {
    this.watchs.forEach(watch => { 
      watch.update()
    })
  }
}